# -*- coding:utf-8 -*-

import socket  # 用于端口检测
import base64  # 用于编解码
import json  # 用于Json解析
import os  # 用于导入系统变量
import sys  # 实现 sys.exit
import logging  # 用于日志输出
import time  # 时间
import re  # 正则过滤
import random  # 随机数
import datetime  # 时间
import requests  # 网络请求
import typing as t  # 类型提示
import asyncio  # 异步请求
from dateutil.relativedelta import relativedelta # 计算时间差
from notify import send # 导入青龙消息通知模块 发送消息


#python依赖:python-dateutil;requests;
#掘金的cookie 多个用& 示例:"token1&token2"
#export jueJin_token="XXXXXXXXX"
#掘金签到是否通知  默认通知 (不通知的话需要配置为'disable')
#export JUEJIN_CHECKIN_SEND="token1&token2"


# 全局变量
text = ''

def jueJinSignIn():
    #去配置文件获取jueJinToken
    #调用方法 [get_jueJinToken] 并赋值 [jueJinTokenList]
    jueJinTokenList = get_jueJinToken()

    #循环获取jueJinTokenList
    for jueJin_token in jueJinTokenList:

        #logger.info("当前 jueJin_token ="+jueJin_token)
        #查询掘友分 请求体示例 : {"growth_type":1}    也是判断cookie有效性#
        resj = requests.post(

            'https://api.juejin.cn/growth_api/v1/user_growth/task_list',

            json={'growth_type': 1},

            headers={

                'Cookie': f'{jueJin_token}'

            }

        ).json()

        # 将字典转换为JSON字符串
        resj_str = json.dumps(resj)
        logger.info("当前 查询掘友分 =" + resj_str)
        # 判断cookie是否失效#
        if resj['err_no'] == 0:
            logger.info("cookie未失效,已校验通过")
            isInvalidOfCookie = False
        else:
            logger.info("cookie已失效")
            isInvalidOfCookie = True

        #判断juejincookie 校验通过#
        if not isInvalidOfCookie:

            #获取当前的日期和时间，并将其赋值给变量today#
            today = datetime.datetime.today()
            #获取月底:  1个月的时间差         一个月后的今天      替换从1号开始   再减去一天 得到上个月的最后一天  #
            last_day = (relativedelta(months=1) + today).replace(day=1) - relativedelta(days=1)
            #判断今天是不是月底#
            if today == last_day:

                print('已到月底')
                logger.info('已到月底')
                # 通知文本内容
                global text  # 声明 text 为全局变量
                text += '已到月底'+"\n"
                text += 'cookie有效性校验通过'+"\n"
            ql_send(text)

        else:
            #jueJinCookie有效性校验失败#

            #青龙通知-企业微信
            ql_send('当前jueJinCookie'+jueJin_token+'已失效,请重新抓包!')
            print('当前jueJinCookie'+jueJin_token+'已失效,请重新抓包!')


# 返回值 list[jueJinToken]
# 方法 获取 jueJinToken值 [系统变量传递]
def get_jueJinToken():
    # 判断 jueJin_token是否存在于环境变量中
    if "jueJin_token" in os.environ:
        # 标准日志输出
        #logger.info("token存在")
        #logger.info(os.environ['jueJin_token'])
        # 读取系统变量 以 & 分割变量
        jueJin_token_list = os.environ['jueJin_token'].split('&')
        # 判断 jueJin_token 数量 大于 0 个
        if len(jueJin_token_list) > 0:
            logger.info("token已启用")
            # 返回 jueJinToken [LIST]
            return jueJin_token_list
        else:  # 判断分支
            # 标准日志输出
            logger.info("jueJin_token变量未启用")
            # 脚本退出
            logger.info("脚本退出")
            sys.exit(1)
    else:  # 判断分支
        # 标准日志输出
        logger.info("未添加jueJin_token变量")
        # 脚本退出
        logger.info("脚本退出")
        sys.exit(0)



# 配置日志
# 设置日志级别为INFO，并定义日志格式
logging.basicConfig(level=logging.INFO, format='%(message)s')
# 获取当前模块的日志记录器
logger = logging.getLogger(__name__)

def ql_send(text):
    if "JUEJIN_CHECKIN_SEND" in os.environ and os.environ["ALICHECKIN_SEND"] == 'disable':
        return True
    else:
        try:
            # 消息发送
            send('掘金签到', text)
        except Exception as err:
            # 标准日志输出
            logger.info("通知发送失败")


"""
    等待指定的时间(单位为秒)

    Args:
        t (float): 等待的时间，单位为秒。

    Returns:
        None
    """
async def wait(t):
    #原来的JavaScript代码中的t是以毫秒为单位的，调用Python的wait函数时将其除以1000。
    await asyncio.sleep(t/1000)



"""
    生成一个随机时间，单位为毫秒。

    Args:
        无参数。

    Returns:
        int: 随机时间，范围在1000到3000毫秒之间。

    """
def getRandomTime():
    return random.randint(1000, 3000)


if __name__ == '__main__':
    jueJinSignIn()
